#include<iostream>
#include<vector>
#include<queue>
#include<cstring>
#include<cmath>
#include<map>
#include<set>
#include<cstdio>
#include<algorithm>
#define debug(a) cout<<#a<<"="<<a<<endl;
using namespace std;
const int maxn=2e3+100;
typedef int LL;
inline LL read(){LL x=0,f=1;char ch=getchar();	while (!isdigit(ch)){if (ch=='-') f=-1;ch=getchar();}while (isdigit(ch)){x=x*10+ch-48;ch=getchar();}
return x*f;}
LL dp[maxn][maxn];
LL a[maxn];
LL dfs(LL pos,LL p){
   if(dp[pos][p]!=0x3f3f3f3f) return dp[pos][p];
   if(p*2>pos) return 0x3f3f3f3f;
   if(pos<=0||p<=0) return 0;
   dp[pos][p]=min(dp[pos][p],dfs(pos-2,p-1)+(a[pos]-a[pos-1])*(a[pos]-a[pos-1]));
   dp[pos][p]=min(dp[pos][p],dfs(pos-1,p));
   return dp[pos][p];
}
int main(void){
   cin.tie(0);std::ios::sync_with_stdio(false);
   LL n,k;
   while(cin>>n>>k){
     memset(a,0,sizeof(a));
     for(LL i=1;i<=n;i++) cin>>a[i];
     sort(a+1,a+1+n);
     memset(dp,0x3f,sizeof(dp));
     dp[0][0]=0;
     dfs(n,k);
     cout<<dp[n][k]<<"\n";
   }
   return 0;
}
